package com.yuanfeng.commoms.util;

import com.yuanfeng.commoms.constant.CommonStatusEnum;
import com.yuanfeng.commoms.exception.BizCodeEnume;
import lombok.Data;
import lombok.experimental.Accessors;

/**
 * @PROJECT_NAME: mall-ms
 * @DESCRIPTION:
 * @USER: hyq
 * @DATE: 2023/2/25 11:27
 */
@Data
@Accessors(chain = true)
public class ResponseResult<T> {

    /**
     * 状态码
     */
    private int code;

    /**
     * 返回内容
     */
    private String message;

    /**
     * 数据对象
     */
    private T data;


    /**
     * 成功响应的方法
     * @param <T>
     * @return
     */
    public static <T> ResponseResult success(){
        return new ResponseResult().setCode(CommonStatusEnum.SUCCESS.getCode()).setMessage(CommonStatusEnum.SUCCESS.getValue());
    }

    /**
     * 成功响应的方法
     * @param data
     * @param <T>
     * @return
     */
    public static <T> ResponseResult success(T data){
        return new ResponseResult().setCode(CommonStatusEnum.SUCCESS.getCode()).setMessage(CommonStatusEnum.SUCCESS.getValue()).setData(data);
    }
    /**
     * 失败：自定义BizCodeEnume类
     *
     * @param data
     * @param <T>
     * @return
     */
    public static <T> ResponseResult success(BizCodeEnume data) {
        return new ResponseResult().setCode(CommonStatusEnum.SUCCESS.getCode()).setMessage(data.getMsg()).setData(data);
    }
    /**
     * 成功响应的方法
     *
     * @param message
     * @param <T>
     * @return
     */
    public static <T> ResponseResult success(int code, String message) {
        return new ResponseResult().setCode(code).setMessage(message);
    }

    /**
     * 成功响应的方法
     *
     * @param data
     * @param <T>
     * @return
     */
    public static <T> ResponseResult success(String message, T data) {
        return new ResponseResult().setCode(CommonStatusEnum.SUCCESS.getCode()).setMessage(message).setData(data);
    }

    /**
     * 成功响应的方法
     *
     * @param data
     * @param <T>
     * @return
     */
    public static <T> ResponseResult success(int code, String message, T data) {
        return new ResponseResult().setCode(code).setMessage(message).setData(data);
    }

    /**
     * 失败响应的方法
     *
     * @param <T>
     * @return
     */
    public static <T> ResponseResult fail(){
        return new ResponseResult().setCode(CommonStatusEnum.FAIL.getCode()).setMessage(CommonStatusEnum.FAIL.getValue());
    }

    /**
     * 失败：自定义BizCodeEnume类
     *
     * @param data
     * @param <T>
     * @return
     */
    public static <T> ResponseResult fail(BizCodeEnume data) {
        return new ResponseResult().setCode(data.getCode()).setMessage(data.getMsg());
    }


    /**
     * 失败：统一的失败
     * @param data
     * @param <T>
     * @return
     */
    public static <T> ResponseResult fail(T data){
        return new ResponseResult().setCode(CommonStatusEnum.FAIL.getCode()).setMessage(CommonStatusEnum.FAIL.getValue()).setData(data);
    }

    /**
     * 失败：自定义失败 错误码和提示信息
     *
     * @param code
     * @param message
     * @return
     */
    public static ResponseResult fail(int code, String message) {
        return new ResponseResult().setCode(code).setMessage(message);
    }

    /**
     * 失败：自定义、提示信息、具体错误
     *
     * @param message
     * @param data
     * @return
     */
    public static ResponseResult fail(String message, Object data) {
        return new ResponseResult().setCode(CommonStatusEnum.FAIL.getCode()).setMessage(message).setData(data);
    }

    /**
     * 失败：自定义失败 错误码、提示信息、具体错误
     *
     * @param code
     * @param message
     * @param data
     * @return
     */
    public static ResponseResult fail(int code, String message, Object data) {
        return new ResponseResult().setCode(code).setMessage(message).setData(data);
    }


}
